package biblioteca.view;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

import biblioteca.controller.ItemIndisponivelException;
import biblioteca.controller.ItemNaoEncontradoException;
import biblioteca.controller.LocacaoNaoEncontradaException;
import biblioteca.controller.UsuarioNaoEncontradoException;
import biblioteca.model.Apostila;
import biblioteca.model.Biblioteca;
import biblioteca.model.GerenciarUsuario;
import biblioteca.model.ItemAcervo;
import biblioteca.model.Livro;
import biblioteca.model.Locacao;
import biblioteca.model.Usuario;
/**
 * Classe responsavel pela iteracao com o Usuario comum, possibilitando ao
 * mesmo buscar Itens, alugar Itens e ver sua situacao de locacoes. 
 * @author willen leiros e fabio queiroz
 *
 */
public class MenuUsuario {

	static Biblioteca central;
	
	/**
	 * Metodo estatico que cria a iteracao com o Usuario comum.
	 * @param usuario Parametro do tipo Usuario que representa a entidade durante
	 * o tempo em que estiver logado no sistema.
	 */

	public static void play(Usuario usuario){
		
		int escolha;
		GerenciarUsuario CRUDUsuario;
		Scanner ler = new Scanner(System.in);
		central = new Biblioteca("Central");

		try{
			do{

				System.out.println("-------------------------------");
				System.out.println("Sistema de Biblioteca - Usuário");
				System.out.println("-------------------------------");
				System.out.println("Usuário logado: "+usuario.getNome());
				System.out.println("-------------------------------");
				System.out.println("Digite 1: para Buscar");
				System.out.println("Digite 2: para Listar");
				System.out.println("Digite 3: para Ver Itens Locados");
				System.out.println("Digite 0: para Sair");

				escolha = ler.nextInt();
				ler.nextLine();


				switch (escolha) {
				case 0:
					central = null;
					usuario = null;
					MenuLogin.play();
					break;

				case 1:
					try{
						System.out.println("Digite o titulo do item");
						String titulo = ler.nextLine();
						ItemAcervo item1 = central.buscarItem(titulo);
						
						if (item1 instanceof Livro){

							System.out.println("Codigo item: "+((Livro) item1).getCodItem());
							System.out.println("Autor: "+((Livro) item1).getAutor());
							System.out.println("Titulo: "+((Livro) item1).getTitulo());
							System.out.println("ISBN: "+((Livro) item1).getIsbn());
							System.out.println("Edição: "+((Livro) item1).getEdicao());
							System.out.println("Situação: "+((Livro) item1).getSituacao());
							System.out.println("Tipo de item: Livro");
							System.out.println("-----------------");
						}
						else if(item1 instanceof Apostila){

							System.out.println("Codigo item: "+((Apostila) item1).getCodItem());
							System.out.println("Autor: "+((Apostila) item1).getAutor());
							System.out.println("Titulo: "+((Apostila) item1).getTitulo());
							System.out.println("Quantidade de Páginas: "+((Apostila) item1).getQtdPaginas());
							System.out.println("Situação: "+((Apostila) item1).getSituacao());
							System.out.println("Tipo de item: Apostila");
							System.out.println("-----------------");
						}
						System.out.println("Deseja locar o item?");
						System.out.println("1-Sim");
						System.out.println("2-Não");
						int opcaoLocar = ler.nextInt();
						ler.nextLine();
						if (opcaoLocar == 1){
							//locacao = new Locacao();
							//locacao.alugar(item1,usuario);
							central.alugar(item1, usuario, new Locacao());
							//System.out.println("Data aluguel: "+locacao.getDataAluguel());
							//System.out.println("Data entrega: "+locacao.getDataDevolucao());
							System.out.println("Item locado com sucesso...");

						}
					}
					catch(ItemIndisponivelException e){
						System.out.println(e.getMessage());
					}
					catch(ItemNaoEncontradoException e){
						System.out.println(e.getMessage());
					}

					break;

				case 2:
					ArrayList<ItemAcervo> itens = new ArrayList<ItemAcervo>();
					itens = null;
					itens = central.listarAcervo();

					for (ItemAcervo item : itens){
						if (item instanceof Livro){
							System.out.println("Codigo item: "+((Livro) item).getCodItem());
							System.out.println("Autor: "+((Livro) item).getAutor());
							System.out.println("Titulo: "+((Livro) item).getTitulo());
							System.out.println("ISBN: "+((Livro) item).getIsbn());
							System.out.println("Edição: "+((Livro) item).getEdicao());
							System.out.println("Situação: "+((Livro) item).getSituacao());
							System.out.println("Tipo de item: Livro");
							System.out.println("-----------------");
						}
						else if(item instanceof Apostila){
							System.out.println("Codigo item: "+((Apostila) item).getCodItem());
							System.out.println("Autor: "+((Apostila) item).getAutor());
							System.out.println("Titulo: "+((Apostila) item).getTitulo());
							System.out.println("Quantidade de Páginas: "+((Apostila) item).getQtdPaginas());
							System.out.println("Situação: "+((Apostila) item).getSituacao());
							System.out.println("Tipo de item: Apostila");
							System.out.println("-----------------");
						}

					}
					break;
					
				case 3:
					try{
						ArrayList<String> sitUsuario = new ArrayList<String>();
						int cont = 1;
						CRUDUsuario = new GerenciarUsuario();
						sitUsuario = CRUDUsuario.sitUsuario(usuario.getCodUsuario());
						for (int i = 0; i<sitUsuario.size();i++){
							System.out.println(sitUsuario.get(i));
							if (cont % 8 == 0){
								System.out.println("----------------------");
							}
							cont++;
						}
					}
					catch(LocacaoNaoEncontradaException e){
						System.out.println(e.getMessage());
					}
					catch(InputMismatchException e){
						System.out.println("Digite um número valido");
					}
					
					
					break;

				default:
					System.out.println("Valor invalido");
					break;
				}


			}while(escolha != 0);
		}
		catch(InputMismatchException e){
			System.out.println("Digite um número valido");
		}
		finally{
			MenuUsuario.play(usuario);
		}

	}

}
